
/**
 * @summary
 * 将对象文字按匹配内容进行分隔，获取分隔后的数组，及匹配结果数组
 * @param {String} str 原始文字
 * @param {String} kw 关键词
 * @param {String} regOpt 正则配置项
 * @returns {{ result: [String], matches: [String]}}
 *
 * @examples
 * 示例文字：'搜索不区分大小写，如果文本是大写，搜索的关键字是小写也是会匹配到'
 * - eg.1：
 * 匹配对象【小写】
 * 匹配结果：
 * [ '小写', '小写' ]
 * 分隔结果：
 * [ '搜索不区分大', '，如果文本是大写，搜索的关键字是', '也是会匹配到' ]
 *
 * - eg.2：
 * 匹配对象【搜索】
 * 匹配结果：
 * [ '搜索', '搜索' ]
 * 分隔结果：
 * [ '', '不区分大小写，如果文本是大写，', '的关键字是小写也是会匹配到' ]
 *
 * @description
 *  - 为什么还要返回匹配结果，而不是只返回分隔结果
 *    因为当需要回显匹配结果时 keyword 可能因大小写区别而跟匹配到文字并不相同
 *    如需要高亮显示匹配到的文字（即本函数需求来源）
 */
export const splitByMatches = (str, kw, regOpt = 'ig') => {
  if (str == null) return null;
  if (kw == null || kw === '') return { result: [str] };

  const regExp = new RegExp(kw, 'ig');
  return {
    result: str.split(regExp),
    matches: str.match(regExp) || [],
  };
};

export default splitByMatches;
